#include <forward_list>
#include <iostream>

using namespace std;

#define N 10
#define OUT(arr, msg) do{ \
    cout << msg; \
    for (size_t i = 0; i < 10; i++) cout << arr[i] << " "; \
    cout << endl; \
}while(0)

int main(int argc, char const *argv[])
{
    /*****************************************************************************************************
     * forward_list 单向链表容器
     * ---------------------------------------------------------------------------------------------------
     * 与list不同的是， forward_list是一个单向链表， 只能单向遍历， 优点在于效率高，占用空间小
     *****************************************************************************************************/
    // -----------------------------------------------
    // --- 定义 ----
    // -----------------------------------------------
    // 默认定义
    forward_list<int> nums_a;

    // 指定大小定义
    forward_list<int> nums_b(10);

    // 使用初始化列表定义
    forward_list<int> nums_c{10, 20, 30};

    // -----------------------------------------------
    // --- 增 ----
    // -----------------------------------------------
    forward_list<int> nums_d;
    nums_d.push_front(100);

    // -----------------------------------------------
    // --- 删 ----
    // -----------------------------------------------
    nums_d.pop_front();

    // -----------------------------------------------
    // --- 改 ----
    // -----------------------------------------------
    nums_d.push_front(101);
    forward_list<int>::iterator p = nums_d.begin();
    *p = 1122;

    // -----------------------------------------------
    // --- 查 ----
    // -----------------------------------------------
    p = nums_d.begin();
    cout << "访问元素 nums_d.begin() : " << *p << endl;

    /*****************************************************************************************************
     * 成员函数
     * ---------------------------------------------------------------------------------------------------
     * array.begin()        返回：随机访问迭代器  首元素位置指针   
     * 
     *****************************************************************************************************/
    
    // array.begin() 
    // -----------------------------------------------
    
    return 0;
}
